//学习关于错误码
//系统内置了一个保存最近一次库函数调用错误的错误码errno也是最常用的错误码
#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<string.h>
#include<errno.h>

//可以把strerror对应的所有错误字符串打印出来：
void test1()
{
  for(int i=0;i<200;i++)
  {
    printf("%d:%s\n",i,strerror(i));//我们也可以仿照这个函数建立自己的错误码，参数是错误码返回值是对应的字符串，内部使用一个字符串数组装所有的错误码字符串，第0个元素是success以此类推

  }
}



int main()
{
  test1();
  int ret=0;
  char*p=(char*)malloc(1000*1000*1000*4);//直接申请4个G的空间肯定会报错的
  if(p==NULL)
  {
    ret=errno;//调用失败的时候errno就会记录最近一次库函数调用失败的错误码
    printf("malloc fail,%d:%s\n",errno,strerror(errno));//strerror是和errno搭配使用，会打印出errno对应的错误字符串

  }
  else 
  {
    printf("success\n");
  }
  return ret;//return不同的数子就是告诉父进程不同的退出码

  //注意：可以使用echo $?输出最近一次程序的退出码

  //结果是： 12:Cannot allocate memory(不能分配空间)
}
//注意：当进程异常的时候，也就是代码没有跑完就出错了，此时进程的退出码无意义

//注意：代码异常本质是我们进程收到了对应的信号，就像我们可以使用kill命令发送信号让进程被杀死或停止等操作
